05. 代码规范——注释

注释



我们希望代码本身就能清晰的表达它在干什么,而不需要任何注释。

但如果你写的类、函数等需要被别人调用,亦或是代码涉及到比较深层的专业知识,那么,配上注释对保持代码的可读性是至关重要的。 注:为保证示例的丰富性,本章节选用了多种编程语言的范例代码块,在学习过程中不必过度关注语法,了解通用的代码规范即可。

  • 每个类的定义函数的声明处都应附带一份注释来描述其功能和用法(除非它们非常简洁短小),并且提醒读者在正确使用此类、函数时应当考虑的因素。当然,也可以在注释里放一小段代码来演示类和函数的基本用法。
class SampleClass(object):
    """Summary of class here.

    Longer class information....
    Longer class information....

    Attributes:
        likes_spam: A boolean indicating if we like SPAM or not.
        eggs: An integer count of the eggs we have laid.
    """

    def __init__(self, likes_spam=False):
        """Inits SampleClass with blah."""
        self.likes_spam = likes_spam
        self.eggs = 0

    def public_method(self):
        """Performs operation blah."""
  • 对于复杂的操作,可以在代码块上面写上若干行注释。对于不是一目了然的代码,应在其行尾添加注释。
# 将数据中存在“|”的字符串拆分为列表。
col_names = [col for col in df] # 提取df的列名
for col in col_names: # 循环处理带“|”的数据
    try: 
        if '|' in df[col][0]:
            df[col] = df[col].apply(lambda x:str(x).split('|'))
    except:
        pass
  • 但请务必注意,不要用注释来描述代码,要假设阅读代码的人比你更专业, 他只是不知道你的代码意图。以下是一个错误示范:
// Utility method that returns when this.closed is true. Throws an exception
// if the timeout is reached.
Public synchronized void waitForClose (final long timeoutMillis)
Throws Exception
{
    if(!closed)
    {
        wait(timeoutMillis);
        if(!closed)
            Throw new Exception(“MockResponseSender could not be closed”);
    }
}